export default class StringUtil {
    //字符串去除全部空格
    static removeAllWhiteSpaceWithString(str: string) {
        if (typeof str === 'string') {
            return str.split(' ').join('');
        } else {
            console.log("str is not string ");
        }
    }

    // 从给定的字符串中以spiltStr来对字符串进行分割
    // param1 ： 给定的字符串
    // param2 : 待分割的字符串
    static getSpiltStringArrayWithStr(str: string, spiltStr: string) {
        if (typeof str === 'string') {
            if (str.indexOf(spiltStr) === -1) {
                return ''
            } else {
                return str.split(spiltStr)
            }
        } else {
            console.log("input str is not string ");
        }
    }

    /**
     * args是可变参数
     * 默认第一个参数args[0] 是完整的待格式化的string, eg: str1 : His name is {0} , age is {1} , grade is {2}
     * 第2个，3个，4个 ... 参数，依次填充的是其中的{0},{1},{2} 
     * stringFormat(str1,'Evan','20','10')
     */
    static stringFormat(...args: string[]): string {
        if (args.length == 0)
            return '';
        var str = args[0];
        for (var i = 1; i < args.length; i++) {
            var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
            str = str.replace(re, args[i]);
        }
        return str;
      }
      /**
       * 该方法只能判断是否输入emoji表情，不能执行replace或提取具体表情符号
       */

      static  isEmojiCharacter(substring:string):boolean {
        for ( var i = 0; i < substring.length; i++) {
            var hs = substring.charCodeAt(i);
            if (0xd800 <= hs && hs <= 0xdbff) {
                if (substring.length > 1) {
                    var ls = substring.charCodeAt(i + 1);
                    var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                    if (0x1d000 <= uc && uc <= 0x1f77f) {
                        return true;
                    }
                }
            } else if (substring.length > 1) {
                var ls = substring.charCodeAt(i + 1);
                if (ls == 0x20e3) {
                    return true;
                }
            } else {
                if (0x2100 <= hs && hs <= 0x27ff) {
                    return true;
                } else if (0x2B05 <= hs && hs <= 0x2b07) {
                    return true;
                } else if (0x2934 <= hs && hs <= 0x2935) {
                    return true;
                } else if (0x3297 <= hs && hs <= 0x3299) {
                    return true;
                } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030
                        || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b
                        || hs == 0x2b50) {
                    return true;
                }
            }
        }
        var regStr = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig;

        if(substring.match(regStr)){
            return true;
        }
        return false
    }

    //这边统一处理特殊字符以及emoij符号
    //账号密码输入，按产品需求，不允许出现任务特殊字符，这其中包括emoij符号
    static checkPasswordInputIsInvaild(pwdStr : string) : boolean{
        /**
         * [^]表示 只要不是[]里列出的范围都返回true
         * 只要检测到 不是大小写字母，0-9的数字，都返回true;否则返回false;
        */
        var pattern = /[^A-Za-z0-9]/ig;
        return pattern.test(pwdStr);
    }
}

//正则表达式 只支持大小写字母，数字，中文以及".", "&", "%", "-", "/"以及空格可支持
export function checkInputIfVaild(inputStr : string) : boolean{
    /**
     * [^]表示 只要不是[]里列出的范围都返回true
     * 只要检测到 不符合上述列出调节的都返回true;否则返回false;
     */
    var pattern = /[^A-Za-z0-9\u4e00-\u9fa5&.%-\/ ]/ig;
    return pattern.test(inputStr);
}